package com.leetcode.www;

/**
 * Creared with IntelliJ IDEA.
 * Description:给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
 *
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-string-ii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * User:yxd
 * Date:2022-04-22
 * Time:23:33
 */
public class Normal541 {
    public String reverseStr(String s, int k) {
        StringBuilder res = new StringBuilder();
        int index = 0;
        int length = s.length();
        while (index < length) {
            int end = Math.min(index + k, length);
            StringBuilder temp = new StringBuilder(s.substring(index, end));
            if ((index / k) % 2 == 0) res.append(temp.reverse());
            else res.append(temp);
            index = end;
        }
        return res.toString();
    }
    public String reverseStr1(String s, int k) {
        int i = 0;
        char[] c = s.toCharArray();
        while(i < c.length){
            re(c,i, Math.min(i + k, c.length) - 1);

            i = i + (2 * k);
        }
        StringBuilder st = new StringBuilder();
        for(char x : c){
            st.append(x);
        }
        return st.toString();
    }
    public void re(char[] c,int l,int r){
        while(l < r){
            char ch = c[l];
            c[l] = c[r];
            c[r] = ch;
            l ++;
            r --;
        }
    }
}
